#ifndef PROJECTION_GPU_H
#define PROJECTION_GPU_H
#include "cuda_runtime.h"
//#include "CUDAAcceleration.h"
//#include "UniversalDimensionConvertor.h"
#include <opencv2\opencv.hpp>
class ApplyRigidTransform;

class Projection_GPU{
public:
	Projection_GPU(const int k, int width, int height);
	~Projection_GPU();
	void setIntrinsicInv(const cv::Mat& intrinsic_inv);
	void setClusterNormals(float4* in);
	void setClusterMap(int* labels);	//assume GPU memory available
	float3* getProjectedMap();




private:
	void initMemory();




	ApplyRigidTransform* dim;
	float* Intrinsic_Inv;
	float* trans;
	int k;
	int width;
	int height;
	float3* output;
	float3* output_CPU;
	float4* normal;

	float3* temp;
	int* labels;
};
#endif